Плохо! Плохо!:  0
Показано с 1 по 1 из 1

Тема: [MV + MZ] DKR_ActorStatusAccumulator

  1. #1
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию [MV + MZ] DKR_ActorStatusAccumulator

    Название плагина: DKR_ActorStatusAccumulator


    Автор: DarchanKaen


    Версия: 1.0


    Дата выхода:
    Версия 1.0 - 28.11.2021


    Описание плагина:
    Плагин позволяет вести счет, сколько раз на Персонажа было наложено Состояние, получать эту информацию, хранить ее и очищать.
    Информация сохраняется в Аккумуляторе, который хранится в указанной переменной; доступно 10 Аккумуляторов.


    Нюансы:
    Плагин может быть полностью несовместим с другими плагинами на Состояния, проверять это нужно индивидуально к плагинам (см. раздел Совместимость).


    Использование плагина(одинаково и для MV , и для MZ):

    В Примечании персонажа нужно написать <statusAccumulator: N>, где N - номер Аккумулятора (от 1 до 10).

    Параметры плагина
    У плагина 10 параметров - номера переменных для сохранения соответствующего Аккумулятора; по-умолчанию в переменных 11-20.

    Команды (в эвенте, в команде "Скрипт")
    DKR.ActorStatusAccumulator.getStatusCount(actorId, statusId); - получить информацию, сколько раз на персонажа был наложен Статус.
    DKR.ActorStatusAccumulator.clearAccumulator(actorI d); - очистить Аккумулятор, указанный для Песонажа с таким номером.
    где:
    actorId - номер Персонажа в Базе данных,
    statusId - номер Состояние в Базе данных.


    Код:

    Спойлер Версия 1.0, MV:

    Код:
    //-----------------------------------------------------------------------------
    //  DKR Actor Status Accumulator 1.0
    //-----------------------------------------------------------------------------
    //  For: RPGMAKER MV
    //  DKR_ActorStatusAccumulator.js
    //-----------------------------------------------------------------------------
    //  28.11.2021 - Версия 1.0.0
    //-----------------------------------------------------------------------------
    // Поставляется AS-IS.
    // Вся ответственность при использовании - на Пользователе!
    //-----------------------------------------------------------------------------
    
    var Imported = Imported || {};
    Imported.DKR_ActorStatusAccumulator = true;
    
    var DKR = DKR || {};          
    DKR.ActorStatusAccumulator = DKR.ActorStatusAccumulator || {}; 
    
    
    //-----------------------------------------------------------------------------
    /*:
     * @plugindesc (v.1.0.0) Плагин позволяет считать, сколько раз на Персонажа было наложено Состояние.
     * 
     * @target MV
     * @author DarchanKaen
     *
     * @help
     *   DKR Actor Status Accumulator
     * ----------------------------------------------------------------------------
     *
     * ---Общая информация:
     * Плагин позволяет вести счет, сколько раз на Персонажа было наложено Состояние,
     * получать эту инфорамацию, хранить ее и очищать. 
     * Информация сохраняется в Аккумуляторе, который хранится в указанной
     * переменной; доступна 10 Аккумуляторов.
     *
     * ---Параметры плагина
     * У плагина 10 параметров - номера переменных для 
     * сохранения соответствующего Аккумулятора;
     * по-умолчанию в переменных 11-20.
     *
     * ---Использование плагина
     * У персонажа в Примечании напишите:
     *  <statusAccumulator: N>, 
     *  где N - номер  Аккумулятора от 1 до 10.
     *
     * ---Команды(в эвенте команда "Скрипт"):
     * DKR.ActorStatusAccumulator.getStatusCount(actorId, statusId)
     * DKR.ActorStatusAccumulator.clearAccumulator(actorId)
     * где actorId - номер Персонажа в Базе данных,
     * statusId - номер Состояние в Базе данных.
     *
     * Команду скрипта DKR.ActorStatusAccumulator.getStatusCount
     * можно использовать в Определении переменной или Условии!
     * ----------------------------------------------------------------------------
     * @param accumulator1VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 1
     * @default 11
     *
     * @param accumulator2VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 2
     * @default 12
     *
     * @param accumulator3VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 3
     * @default 13
     *
     * @param accumulator4VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 4
     * @default 14
     *
     * @param accumulator5VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 5
     * @default 15
     *
     * @param accumulator6VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 6
     * @default 16
     *
     * @param accumulator7VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 7
     * @default 17
     *
     * @param accumulator8VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 8
     * @default 18
     *
     * @param accumulator9VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 9
     * @default 19
     *
     * @param accumulator10VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 10
     * @default 20
     *
     */
    
    
    (function() { 
    
    
    
    	//----DATA
    	DKR.ActorStatusAccumulator.parameters = PluginManager.parameters('DKR_ActorStatusAccumulator');
    	let accumulator1VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator1VarId"]) || 11;
    	let accumulator2VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator2VarId"]) || 12;
    	let accumulator3VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator3VarId"]) || 13;
    	let accumulator4VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator4VarId"]) || 14;
    	let accumulator5VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator5VarId"]) || 15;
    	let accumulator6VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator6VarId"]) || 16;
    	let accumulator7VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator7VarId"]) || 17;
    	let accumulator8VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator8VarId"]) || 18;
    	let accumulator9VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator9VarId"]) || 19;
    	let accumulator10VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator10VarId"]) || 20;
    	
    	
    	
    	//----MODIFY 
    	Game_Action.prototype.itemEffectAddNormalState = function(target, effect) {
    		var chance = effect.value1;
    		if (!this.isCertainHit()) {
    			chance *= target.stateRate(effect.dataId);
    			chance *= this.lukEffectRate(target);
    		}
    		if (Math.random() < chance) {
    			target.addState(effect.dataId);
    			this.makeSuccess(target);
    		}
    		
    		//--mod
    		if( true === target.isActor() ){
    			addStatusToActorAccumulator(target, effect.dataId);
    			
    		}
    		
    	};
    
    	Game_Interpreter.prototype.command313 = function() {
    		this.iterateActorEx(this._params[0], this._params[1], function(actor) {
    			var alreadyDead = actor.isDead();
    			if (this._params[2] === 0) {
    				actor.addState(this._params[3]);
    				
    				//--mod
    				addStatusToActorAccumulator(actor, this._params[3]);
    				
    			} else {
    				actor.removeState(this._params[3]);
    			}
    			if (actor.isDead() && !alreadyDead) {
    				actor.performCollapse();
    			}
    			actor.clearResult();
    		}.bind(this));
    		return true;
    	};
    
    
    
    	//----LOGIC
    	let addStatusToActorAccumulator = function(gameActor, statusId){
    		let actorId = gameActor.actorId();
    		let actorStatusAccumulatorVarId = getActorStatusAccumulatorVarId(actorId);
    		let actorStatusAccumulator = null;
    		
    		if(-1 !== actorStatusAccumulatorVarId){
    			actorStatusAccumulator = $gameVariables.value(actorStatusAccumulatorVarId) || [];
    			
    			actorStatusAccumulator.push(statusId);
    		
    			$gameVariables.setValue(actorStatusAccumulatorVarId, actorStatusAccumulator);
    		}
    	}
    	
    	
    	let getActorStatusAccumulatorVarId = function(actorId){
    		let actorStatusAccumulatorVarId = -1;
    		
    		let actorMetadata = getActorMetadata(actorId);
    		
    		let actorStatusAccumulatorID = -1;
    		
    		actorStatusAccumulatorID = Number(actorMetadata.statusAccumulator);
    		actorStatusAccumulatorVarId = getAccumulatorVarIdByAccumId(actorStatusAccumulatorID);
    		
    			//console.log('_actorStatusAccumulatorID:', actorStatusAccumulatorID);
    			//console.log('_actorStatusAccumulatorVarId:', actorStatusAccumulatorVarId);
    		
    		return actorStatusAccumulatorVarId;
    	} 
    	
    	
    	let getActorMetadata = function(actorId){
    		let actorMetadata = null;
    		
    		let actor = $dataActors[actorId];
    		
    		actorMetadata = actor.meta;
    		
    		return actorMetadata;
    	}
    	
    	
    	let getAccumulatorVarIdByAccumId = function(actorStatusAccumulatorID){
    		let actorStatusAccumulatorVarId = null;
    		
    		switch(actorStatusAccumulatorID){
    			case 1:
    				actorStatusAccumulatorVarId = accumulator1VarId;
    				break;
    			case 2:
    				actorStatusAccumulatorVarId = accumulator2VarId;
    				break;
    			case 3:
    				actorStatusAccumulatorVarId = accumulator3VarId;
    				break;
    			case 4:
    				actorStatusAccumulatorVarId = accumulator4VarId;
    				break;
    			case 5:
    				actorStatusAccumulatorVarId = accumulator5VarId;
    				break;
    			case 6:
    				actorStatusAccumulatorVarId = accumulator6VarId;
    				break;
    			case 7:
    				actorStatusAccumulatorVarId = accumulator7VarId;
    				break;
    			case 8:
    				actorStatusAccumulatorVarId = accumulator8VarId;
    				break;
    			case 9:
    				actorStatusAccumulatorVarId = accumulator9VarId;;
    				break;
    			case 10:
    				actorStatusAccumulatorVarId = accumulator10VarId;
    				break;
    			default:
    				actorStatusAccumulatorVarId = -1;
    				break;
    				
    		}
    		
    		return actorStatusAccumulatorVarId;
    	}
    	
    	
    
    	
    	
    	let getStatusCountInAccumulator = function(actorId, statusId){
    		let statusCount = 0;
    		
    		let actorStatusAccumulatorVarId = getActorStatusAccumulatorVarId(actorId);
    		let actorStatusAccumulator = null;
    		
    		if(-1 !== actorStatusAccumulatorVarId){
    			actorStatusAccumulator = $gameVariables.value(actorStatusAccumulatorVarId) || [];
    			
    			for(let n = 0; n < actorStatusAccumulator.length; n++){
    				let currentStatusId = actorStatusAccumulator[n];
    				if(currentStatusId === statusId){
    					statusCount++;
    				}
    			}
    		}
    			//console.log('statusCount of ' + statusId + ' is: ' + statusCount);
    		
    		return statusCount;
    	}
    	
    	
    	clearConcreteStatusAccumulator = function(actorId){
    		let actorStatusAccumulatorVarId = getActorStatusAccumulatorVarId(actorId);
    		if(-1 !== actorStatusAccumulatorVarId){
    			$gameVariables.setValue(actorStatusAccumulatorVarId, []);
    		}
    	}
    	
    	
    	
    	//-----COMMANDS
    	DKR.ActorStatusAccumulator.getStatusCount = function(actorId, statusId){
    		return getStatusCountInAccumulator(actorId, statusId);
    	}
    	
    	DKR.ActorStatusAccumulator.clearAccumulator = function(actorId){
    		clearConcreteStatusAccumulator(actorId);
    	}
    
    
    
    })();


    Спойлер Версия 1.0, MZ:

    Код:
    //-----------------------------------------------------------------------------
    //  DKR Actor Status Accumulator 1.0
    //-----------------------------------------------------------------------------
    //  For: RPGMAKER MZ
    //  DKR_ActorStatusAccumulator.js
    //-----------------------------------------------------------------------------
    //  28.11.2021 - Версия 1.0.0
    //-----------------------------------------------------------------------------
    // Поставляется AS-IS.
    // Вся ответственность при использовании - на Пользователе!
    //-----------------------------------------------------------------------------
    
    var Imported = Imported || {};
    Imported.DKR_ActorStatusAccumulator = true;
    
    var DKR = DKR || {};          
    DKR.ActorStatusAccumulator = DKR.ActorStatusAccumulator || {}; 
    
    
    //-----------------------------------------------------------------------------
    /*:
     * @plugindesc (v.1.0.0) Плагин позволяет считать, сколько раз на Персонажа было наложено Состояние.
     * 
     * @target MZ
     * @author DarchanKaen
     *
     * @help
     *   DKR Actor Status Accumulator
     * ----------------------------------------------------------------------------
     *
     * ---Общая информация:
     * Плагин позволяет вести счет, сколько раз на Персонажа было наложено Состояние,
     * получать эту инфорамацию, хранить ее и очищать. 
     * Информация сохраняется в Аккумуляторе, который хранится в указанной
     * переменной; доступна 10 Аккумуляторов.
     *
     * ---Параметры плагина
     * У плагина 10 параметров - номера переменных для 
     * сохранения соответствующего Аккумулятора;
     * по-умолчанию в переменных 11-20.
     *
     * ---Использование плагина
     * У персонажа в Примечании напишите:
     *  <statusAccumulator: N>, 
     *  где N - номер  Аккумулятора от 1 до 10.
     *
     * ---Команды(в эвенте команда "Скрипт"):
     * DKR.ActorStatusAccumulator.getStatusCount(actorId, statusId)
     * DKR.ActorStatusAccumulator.clearAccumulator(actorId)
     * где actorId - номер Персонажа в Базе данных,
     * statusId - номер Состояние в Базе данных.
     *
     * Команду скрипта DKR.ActorStatusAccumulator.getStatusCount
     * можно использовать в Определении переменной или Условии!
     * ----------------------------------------------------------------------------
     * @param accumulator1VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 1
     * @default 11
     *
     * @param accumulator2VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 2
     * @default 12
     *
     * @param accumulator3VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 3
     * @default 13
     *
     * @param accumulator4VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 4
     * @default 14
     *
     * @param accumulator5VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 5
     * @default 15
     *
     * @param accumulator6VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 6
     * @default 16
     *
     * @param accumulator7VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 7
     * @default 17
     *
     * @param accumulator8VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 8
     * @default 18
     *
     * @param accumulator9VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 9
     * @default 19
     *
     * @param accumulator10VarId
     * @type variable
     * @desc Номер переменной для сохранения аккамулятора Актера 10
     * @default 20
     *
     */
    
    
    (function() { 
    
    
    
    	//----DATA
    	DKR.ActorStatusAccumulator.parameters = PluginManager.parameters('DKR_ActorStatusAccumulator_MZ');
    	let accumulator1VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator1VarId"]) || 11;
    	let accumulator2VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator2VarId"]) || 12;
    	let accumulator3VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator3VarId"]) || 13;
    	let accumulator4VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator4VarId"]) || 14;
    	let accumulator5VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator5VarId"]) || 15;
    	let accumulator6VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator6VarId"]) || 16;
    	let accumulator7VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator7VarId"]) || 17;
    	let accumulator8VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator8VarId"]) || 18;
    	let accumulator9VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator9VarId"]) || 19;
    	let accumulator10VarId = Number(DKR.ActorStatusAccumulator.parameters["accumulator10VarId"]) || 20;
    	
    	
    	
    	//----MODIFY 
    	Game_Action.prototype.itemEffectAddNormalState = function(target, effect) {
    		var chance = effect.value1;
    		if (!this.isCertainHit()) {
    			chance *= target.stateRate(effect.dataId);
    			chance *= this.lukEffectRate(target);
    		}
    		if (Math.random() < chance) {
    			target.addState(effect.dataId);
    			this.makeSuccess(target);
    		}
    		
    		//--mod
    		if( true === target.isActor() ){
    			addStatusToActorAccumulator(target, effect.dataId);
    			
    		}
    		
    	};
    	
    	
    	Game_Interpreter.prototype.command313 = function(params) {
    		this.iterateActorEx(params[0], params[1], actor => {
    			const alreadyDead = actor.isDead();
    			if (params[2] === 0) {
    				actor.addState(params[3]);
    				
    				//--mod
    				addStatusToActorAccumulator(actor, this._params[3]);
    			} else {
    				actor.removeState(params[3]);
    			}
    			if (actor.isDead() && !alreadyDead) {
    				actor.performCollapse();
    			}
    			actor.clearResult();
    		});
    		return true;
    };
    
    
    	//----LOGIC
    	let addStatusToActorAccumulator = function(gameActor, statusId){
    		let actorId = gameActor.actorId();
    		let actorStatusAccumulatorVarId = getActorStatusAccumulatorVarId(actorId);
    		let actorStatusAccumulator = null;
    		
    		if(-1 !== actorStatusAccumulatorVarId){
    			actorStatusAccumulator = $gameVariables.value(actorStatusAccumulatorVarId) || [];
    			
    			actorStatusAccumulator.push(statusId);
    		
    			$gameVariables.setValue(actorStatusAccumulatorVarId, actorStatusAccumulator);
    		}
    	}
    	
    	
    	let getActorStatusAccumulatorVarId = function(actorId){
    		let actorStatusAccumulatorVarId = -1;
    		
    		let actorMetadata = getActorMetadata(actorId);
    		
    		let actorStatusAccumulatorID = -1;
    		
    		actorStatusAccumulatorID = Number(actorMetadata.statusAccumulator);
    		actorStatusAccumulatorVarId = getAccumulatorVarIdByAccumId(actorStatusAccumulatorID);
    		
    			//console.log('_actorStatusAccumulatorID:', actorStatusAccumulatorID);
    			//console.log('_actorStatusAccumulatorVarId:', actorStatusAccumulatorVarId);
    		
    		return actorStatusAccumulatorVarId;
    	} 
    	
    	
    	let getActorMetadata = function(actorId){
    		let actorMetadata = null;
    		
    		let actor = $dataActors[actorId];
    		
    		actorMetadata = actor.meta;
    		
    		return actorMetadata;
    	}
    	
    	
    	let getAccumulatorVarIdByAccumId = function(actorStatusAccumulatorID){
    		let actorStatusAccumulatorVarId = null;
    		
    		switch(actorStatusAccumulatorID){
    			case 1:
    				actorStatusAccumulatorVarId = accumulator1VarId;
    				break;
    			case 2:
    				actorStatusAccumulatorVarId = accumulator2VarId;
    				break;
    			case 3:
    				actorStatusAccumulatorVarId = accumulator3VarId;
    				break;
    			case 4:
    				actorStatusAccumulatorVarId = accumulator4VarId;
    				break;
    			case 5:
    				actorStatusAccumulatorVarId = accumulator5VarId;
    				break;
    			case 6:
    				actorStatusAccumulatorVarId = accumulator6VarId;
    				break;
    			case 7:
    				actorStatusAccumulatorVarId = accumulator7VarId;
    				break;
    			case 8:
    				actorStatusAccumulatorVarId = accumulator8VarId;
    				break;
    			case 9:
    				actorStatusAccumulatorVarId = accumulator9VarId;;
    				break;
    			case 10:
    				actorStatusAccumulatorVarId = accumulator10VarId;
    				break;
    			default:
    				actorStatusAccumulatorVarId = -1;
    				break;
    				
    		}
    		
    		return actorStatusAccumulatorVarId;
    	}
    	
    	
    
    	
    	
    	let getStatusCountInAccumulator = function(actorId, statusId){
    		let statusCount = 0;
    		
    		let actorStatusAccumulatorVarId = getActorStatusAccumulatorVarId(actorId);
    		let actorStatusAccumulator = null;
    		
    		if(-1 !== actorStatusAccumulatorVarId){
    			actorStatusAccumulator = $gameVariables.value(actorStatusAccumulatorVarId) || [];
    			
    			for(let n = 0; n < actorStatusAccumulator.length; n++){
    				let currentStatusId = actorStatusAccumulator[n];
    				if(currentStatusId === statusId){
    					statusCount++;
    				}
    			}
    		}
    			//console.log('statusCount of ' + statusId + ' is: ' + statusCount);
    		
    		return statusCount;
    	}
    	
    	
    	clearConcreteStatusAccumulator = function(actorId){
    		let actorStatusAccumulatorVarId = getActorStatusAccumulatorVarId(actorId);
    		if(-1 !== actorStatusAccumulatorVarId){
    			$gameVariables.setValue(actorStatusAccumulatorVarId, []);
    		}
    	}
    	
    	
    	
    	//-----COMMANDS
    	DKR.ActorStatusAccumulator.getStatusCount = function(actorId, statusId){
    		return getStatusCountInAccumulator(actorId, statusId);
    	}
    	
    	DKR.ActorStatusAccumulator.clearAccumulator = function(actorId){
    		clearConcreteStatusAccumulator(actorId);
    	}
    
    
    
    })();



    Загрузка:



    Условия поставки плагина:
    Поставляется AS-IS.
    Вся ответственность при использовании - на Пользователе!
    !


    Совместимость:
    Т.к. плагин меняет логику обработки Состояний (хоть и незначительно) - он несовместим с другими плагинами, меняющими логику применения Состояний.=)


    Пример использования:
    Числа ниже - условны!
    Например, нас интересует сколько раз Персонажа №2 отравили, то есть наложили Состояние №23 и это значение мы пишем в переменную №5.
    В Опрделении переменной выбирает "Скрипт" и пишем DKR.ActorStatusAccumulator.getStatusCount(2, 23).
    Теперь мы знаем, что в этой переменной записано, сколько же раз несчастного отравили...И теперь в магазинах будет продаваться ТОЛЬКО антидот. =)
    При этом обратите внимание - после каждого отравления в переменная №5 автоматически не обновляется и нужно снова делать Определение переменной.
    Спойлер Скрин с объяснением, как можно использовать:




    Спойлер Лирическое отступление:
    Подумал, что такой плагин может лично мне понадобиться для игровой статистики. Может еще кому-то поможет.
    Последний раз редактировалось Darchan Kaen; 29.11.2021 в 00:00. Причина: Скрин с примером использования

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
[MV + MZ] DKR_ActorStatusAccumulator